package br.com.bikes4bikers.controller.admin;

import java.io.IOException;
import java.util.List;

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import br.com.bikes4bikers.model.Endereco;
import br.com.bikes4bikers.model.EnderecoUsuarioPK;
import br.com.bikes4bikers.model.Funcionario;
import br.com.bikes4bikers.model.PerfilSistema;
import br.com.bikes4bikers.model.Usuario;
import br.com.bikes4bikers.service.EnderecoService;
import br.com.bikes4bikers.service.PerfilService;
import br.com.bikes4bikers.service.UsuarioService;

@Controller
@Scope("request")
@RequestMapping("/admin/funcionario")
public class FuncionarioController {
	
	@Autowired
	private EnderecoService enderecoService;
	
	@Autowired
	private PerfilService perfilService;
	
	@Autowired
	@Qualifier("funcionarioService")
	private UsuarioService usuarioService;
	
	private List<PerfilSistema> perfis;
	
	@PostConstruct
	public void init(){
		perfis = perfilService.listarTodosPerfisDoSistema();
	}

	/**
	 * M�todo para navegar at� a tela de cadastro de novo funcionario
	 * @return
	 */
	@RequestMapping("/novo")
	public ModelAndView navegarNovoFuncionario(){
		ModelAndView mav = new ModelAndView("admin/funcionario/novo");
		mav.addObject("perfis", perfis);
		return mav;
	}
	
	@RequestMapping(value = "/cadastrar", method = RequestMethod.POST)
	public ModelAndView cadastrarNovoFuncionario(Funcionario funcionario, @RequestParam(value="avatar", required=false) MultipartFile avatar) throws IOException{
		funcionario.setImagem(avatar.getBytes());
		funcionario.getEnderecoUsuario().setEnderecoUsuarioPK(new EnderecoUsuarioPK(funcionario.getCpf(), funcionario.getEnderecoUsuario().getEndereco().getId()));
		usuarioService.cadastradarUsuario(funcionario);
		
		ModelAndView mav = new ModelAndView("admin/funcionario/novo");
		mav.addObject("msgSucesso", "Funcion�rio cadastrado com sucesso");
		
		return mav;
	}
	
	@RequestMapping("/listar")
	public ModelAndView listarTodosFuncionariosCadastrados() {
		ModelAndView mav = new ModelAndView("admin/funcionario/lista");
		List<Usuario> funcionarios = usuarioService.listarTodosUsuarios();
		mav.addObject("funcionarios", funcionarios);
		return mav;
	}
	
	@RequestMapping(value= "/pesquisarEndereco", method = RequestMethod.POST)
	@ResponseBody
	public Endereco pesquisarEndereco(Endereco endereco){
		Endereco enderecoTemp = enderecoService.pesquisarEnderecoPorCep(endereco.getCep());
		return enderecoTemp;
	}
	
}
